home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 6 / FM Towns Free Software Collection 6.iso / t_os / musicedi / music2.bas next >
BASIC Source File  |  1993-07-08  |  23KB  |  312 lines

  1. 10 ' 音楽天国  制作期間 7月24日  11月03日-11月21日
  2. 20 SCREEN@0:CONSOLE 0,24,2:COLOR 7,0,0:CLEAR:DEFINT A-Z:DIM PIC(6720),SP(9999):LINE(0,0)-(639,479),PSET,%15,BF:LOAD@"ONP.TIF":FOR A=0 TO 14:CX=A*32:GET@A(CX,9)-(CX+31,64),PIC,448*A:NEXT:DIM ONN$(1,128),VOC(127),LN!(15),L2(13)
  3. 30 FOR A=1 TO 15:READ LN!(A):NEXT:DATA 4,3,2,1.5,1,0.75,0.5,0.25,0.125,4,2,1,0.5,0.25,0.125
  4. 40 PALETTE 7,[164,164,164],BF:GOSUB *音色名:INTERVAL 1:ON INTERVAL GOSUB *時間
  5. 50 ON KEY (1) GOSUB *F1:ON KEY (2) GOSUB *F2:ON KEY (3) GOSUB *F3:ON KEY (4) GOSUB *F4:ON KEY (5) GOSUB *F5:ON KEY(6) GOSUB *F6:ON KEY(7) GOSUB *F7:ON KEY(8) GOSUB *F8:ON KEY(9) GOSUB *F9
  6. 60 DIM VO(13),OK2(13):' VO:音色 OK2:現在の高さ
  7. 70 FOR A=0 TO 13:VO(A)=1:OK2(A)=4:NEXT:MX=0:MY=0:ON1=5:ON2=1:MOUSE 0:MOUSE 1,0,0,1
  8. 80 DIM OT(999,13),OK(999,13),OL(999,13),OE(13),OC(13,3),OC2(3):' OT:ドレミなど  OK:音の高さ OL:音の長さ OE:音の最後 
  9. 90 DIM MC(13),ML$(15),PL$(13),MK(13):CDC=0:TNP=120
  10. 100 FOR A=0 TO 14:READ ML$(A):NEXT:DATA 1,2.,2,4.,,8.,8,16,32,1,2,4,8,16,32
  11. 110 *表示
  12. 120 INTERVAL OFF:MOUSE 1,,,0:CLS:LINE(0,0)-(639,479),PSET,%7,BF:LINE(9,48)-(632,464),PSET,%15,BF
  13. 130 LINE(18,38)-(593,39),PSET,0,BF:LINE(592,22)-(593,38),PSET,0,BF:LINE(8,48)-(632,464),PSET,0,B:SYMBOL(32,0),"音楽天国 Ver 2.05D    制作  元内康博",1,1,0:SYMBOL(500,0),DATE$,1,1,0
  14. 140 LINE(15,20)-(591,37),PSET,0,BF,7:SYMBOL(16,21),"ファイル 音譜  表示  演奏  その他  左へ  右へ  上へ  下へ",1,1,0
  15. 150 FOR A=0 TO 3:CY=A*100+80:LINE(620,CY)-(639,CY+20),PSET,0,BF,7:LINE(620,CY+20)-(639,CY+40),PSET,0,BF,7:SYMBOL(621,CY+2),"↑",1,1,0:SYMBOL(621,CY+22),"↓",1,1,0:NEXT
  16. 160 LINE(18,38)-(593,39),PSET,0,BF:LINE(592,22)-(593,38),PSET,0,BF:LINE(8,48)-(632,464),PSET,0,B
  17. 170 FOR A=0 TO 3:CY=A*100+80:LINE(620,CY)-(639,CY+20),PSET,0,BF,7:LINE(620,CY+20)-(639,CY+40),PSET,0,BF,7:SYMBOL(621,CY+2),"↑",1,1,0:SYMBOL(621,CY+22),"↓",1,1,0:NEXT
  18. 180 *表示2
  19. 190 MOUSE 1,,,0:CC=MY:LINE(610,16)-(639,34),PSET,0,BF,7:SYMBOL(611,17),STR$(MX),1,1,0
  20. 200 GOSUB *禁:FOR A=0 TO 3:C=A+CC:CY=A*100:LINE(16,CY+50)-(619,CY+160),PSET,7,BF:PUT@A(16,80+CY)-(47,135+CY),PIC:FOR B=0 TO 4:LINE(16,90+B*8+CY)-(619,90+B*8+CY),PSET,0:NEXT
  21. 210 SYMBOL(16,CY+60),"番号"+STR$(C+1),1,1,%8:SYMBOL(16,CY+76),"音色"+STR$(VO(C)),1,1,%8:SYMBOL(16,CY+94),"高さ"+STR$(OK2(C)),1,1,%8
  22. 220 IF OE(C)=0 THEN 280
  23. 230 C1=A*100:FOR D=0 TO 13:CX=D*40+60:E=D+MX*10:IF OC(D,A)=0 OR (OK(E,C)<OK2(C) AND OT(E,C)<7 AND OL(E,C)<10) OR (OK(E,C)>OK2(C)+1 AND OL(E,C)<10) OR (OK2(C)>OK(E,C)+1 AND OT(E,C)=7 AND OL(E,C)<10) THEN 270
  24. 240 CCY=-(OK(E,C)-OK2(C))*28+(7-OT(E,C))*4
  25. 250 IF OL(E,C)<10 THEN PUT@A(CX,C1+CCY+63)-(CX+31,C1+110+CCY),PIC,MATTE,,,%15,448*OC(D,A)+2240:C2=OK2(C):IF OK(E,C)+1=C2 OR (OK(E,C)=C2 AND OT(E,C)=1) OR (OK(E,C)>C2 AND OT(E,C)>5) THEN C9=-(OK(E,C)<=C2)*48:LINE(CX,C1+82+C9)-(CX+19,C1+C9+82),PSET,0
  26. 260 IF OL(E,C)>9 THEN O=OL(E,C)-9:IF O>2 THEN PUT@A(CX,C1+79)-(CX+31,C1+127),PIC,,,,,448*(O-1) ELSE LINE(CX+10,C1+94+O*4)-(CX+18,C1+98+O*4),PSET,0,BF
  27. 270 NEXT
  28. 280 NEXT
  29. 290 LINE(50,465)-(300,480),PSET,%7,BF:IF ON2=1 THEN SYMBOL(150,465),KMID$("   全付点二分  二分付点四分  四分付点八分  八分 16分32分",ON1*4-3,4)+"音譜",1,1,0
  30. 300 IF ON2=2 THEN SYMBOL(150,465),KMID$("  全 二分 四分 八分十六分三二分",ON1*3-2,3)+"休符",1,1,0
  31. 310 *MAIN
  32. 320 INTERVAL ON:MOUSE 1,,,1:GOSUB *解:WAIT 20
  33. 330 CX=MOUSE(0):CY=MOUSE(1):C1=MOUSE(2,0):C2=MOUSE(2,1):PA=PAD(1):PTR=PTRIG(1):A$=INKEY$
  34. 340 IF MOUSE(2,0)=-1 THEN 350 ELSE 330
  35. 350 IF CY>20 AND CX>16 AND CY<40 AND CX<592 THEN C=INT((CX-16)/64):ON C+1 GOSUB *F1,*F2,*F3,*F4,*F5,*F6,*F7,*F8,*F9
  36. 360 IF CX>60 AND CX<620 AND CY>60 AND CY<460 THEN 420
  37. 370 IF CX>620 AND CY>50 AND CY<440 THEN 390
  38. 380 GOTO 330
  39. 390 C1=INT((CY-50)/100):CY=INT((CY-50)/50)-C1*2:OK2(C1+MY)=OK2(C1+MY)-(CY=0)*2-1:IF OK2(C1+MY)<1 THEN OK2(C1+MY)=1 ELSE IF OK2(C1+MY)>7 THEN OK2(C1+MY)=7
  40. 400 GOTO *表示2
  41. 410 ' 配置
  42. 420 GOSUB *禁:CY=INT((CY-60)/100):C2=MY+CY:CX=INT((MOUSE(0)-60)/40):CC=OE(C2):OE(C2)=OE(C2)+1:O1=ON1-(ON2=2)*8
  43. 430 IF OC(CX,CY)<>0 THEN LINE(CX*40+60,CY*100+60)-(CX*40+91,CY*100+139),PSET,%15,BF:FOR A=0 TO 4:LINE(CX*40+60,90+A*8+CY*100)-(CX*40+91,90+A*8+CY*100),PSET,0:NEXT:O1=OL(CX,CY)
  44. 440 WAIT 20:IF O1>9 THEN 550
  45. 450 CB=INT((MOUSE(1)-60-CY*100)/4):IF CB<0 THEN CB=0 ELSE IF CB>14 THEN CB=14
  46. 460 CCX=INT((CX*40+90-MOUSE(0))/30):O=CCX+O1:IF O<1 THEN O=1 ELSE IF O>9 THEN O=9
  47. 470 C=CB:PUT@A(CX*40+60,CY*100+35+C*4)-(CX*40+91,CY*100+82+C*4),PIC,XOR,,,,448*O+2240:IF C<2 OR C>12 THEN C9=-(C>12)*48:LINE(CX*40+60,CY*100+82+C9)-(CX*40+79,CY*100+C9+82),PSET,0
  48. 480 PUT@A(CX*40+60,CY*100+35+C*4)-(CX*40+91,CY*100+82+C*4),PIC,XOR,,,,448*O+2240:IF C<2 OR C>12 THEN LINE(CX*40+60,CY*100+82+C9)-(CX*40+79,CY*100+C9+82),PSET,%15
  49. 490 IF MOUSE(2,1)=-1 THEN GOSUB *解:GOTO *MAIN
  50. 500 IF MOUSE(2,0)=0 THEN 450
  51. 510 PUT@A(CX*40+60,CY*100+35+C*4)-(CX*40+91,CY*100+82+C*4),PIC,MATTE,,,%15,448*O+2240:OC(CX,CY)=O:IF C<2 OR C>12 THEN LINE(CX*40+60,CY*100+82+C9)-(CX*40+79,CY*100+C9+82),PSET,0
  52. 520 IF OE(C2)<MX*10+CX THEN OE(C2)=MX*10+CX
  53. 530 OT(CX+MX*10,C2)=7-(C MOD 7):OK(CX+MX*10,C2)=OK2(C2)-INT((C-7)/7):WAIT 20:OL(CX+MX*10,C2)=O:GOSUB *解:GOTO *MAIN
  54. 540 '休符配備
  55. 550 O1=O1-8
  56. 560 CCX=INT((CX*40+90-MOUSE(0))/30):O=CCX+O1:IF O<1 THEN O=1 ELSE IF O>6 THEN O=6
  57. 570 IF O>2 THEN PUT@A(CX*40+60,CY*100+79)-(CX*40+91,CY*100+126),PIC,XOR,,,,448*(O-1) ELSE LINE(CX*40+70,CY*100+94+O*4)-(CX*40+78,CY*100+98+O*4),XOR,7,BF
  58. 580 IF O>2 THEN PUT@A(CX*40+60,CY*100+79)-(CX*40+91,CY*100+126),PIC,XOR,,,,448*(O-1) ELSE LINE(CX*40+70,CY*100+94+O*4)-(CX*40+78,CY*100+98+O*4),XOR,7,BF
  59. 590 IF MOUSE(2,1)=-1 THEN GOSUB *解:GOTO *MAIN
  60. 600 IF MOUSE(2,0)=0 THEN 560
  61. 610 IF O>2 THEN PUT@A(CX*40+60,CY*100+79)-(CX*40+91,CY*100+126),PIC,,,,,448*(O-1) ELSE LINE(CX*40+70,CY*100+94+O*4)-(CX*40+78,CY*100+98+O*4),PSET,0,BF
  62. 620 IF OE(C2)<MX*10+CX THEN OE(C2)=MX*10+CX
  63. 630 OC(CX,CY)=O:OL(CX+MX*10,C2)=O+9:GOSUB *解:GOTO *MAIN
  64. 640 *時間
  65. 650 LINE(570,0)-(639,15),PSET,%7,BF:SYMBOL(570,0),TIME$,1,1,0:IF MID$(TIME$,4,2)="59" AND VAL(MID$(TIME$,7,2))>56 THEN BEEP 363523,50,390:WAIT 95:BEEP:WAIT 95:BEEP:WAIT 95:BEEP 363523,60,800:WAIT 5
  66. 660 音=1-音:IF 音楽=0 OR 音=0 THEN RETURN
  67. 670 GOSUB *禁:INTERVAL OFF:FOR M=0 TO 13:M1=MC(M):PL$(M)="":M2!=0:IF MC(M)>OE(M) THEN 750
  68. 680 IF OE(M)<M2! THEN 750 
  69. 690 MM=OL(M1,M):IF MM=0 THEN 730
  70. 700 M2!=M2!+LN!(MM):IF MM>9 THEN PL$(M)=PL$(M)+"R"+ML$(MM-1)
  71. 710 WHILE MM<10:IF OK(M1,M)<>MK(M) THEN MK(M)=OK(M1,M):PL$(M)=PL$(M)+"O"+RIGHT$(STR$(OK(M1,M)),1)
  72. 720 PL$(M)=PL$(M)+MID$("CDEFGAB",OT(M1,M),1)+ML$(MM-1):MM=10:WEND
  73. 730 M1=M1+1:IF M1>OE(M) THEN M2!=6:MEC=MEC+1
  74. 740 IF M2!<5 THEN 680
  75. 750 MC(M)=M1:NEXT:PLAY PL$(0),PL$(1),PL$(2),PL$(3),PL$(4),PL$(5),PL$(6),PL$(7),PL$(8),PL$(9),PL$(10),PL$(11),PL$(12),PL$(13):IF MEC=14 THEN MEC=0:FOR M=0 TO 13:MC(M)=0:NEXT
  76. 760 GOSUB *解:INTERVAL ON:RETURN
  77. 770 *F1
  78. 780 GOSUB *禁:GET@A(16,40)-(130,160),SP:LINE(16,40)-(130,160),PSET,0,BF,7:SYMBOL(17,41),"読み込み",1,1,0:SYMBOL(17,60),"保存",1,1,0:SYMBOL(17,80),"亡者形式SAVE",1,1,0:SYMBOL(25,100),"MML形式SAVE",1,1,0:SYMBOL(25,120),"PCMLOAD",1,1,0
  79. 790 SYMBOL(25,140),"FM LOAD",1,1,0:CCY=0
  80. 800 LINE(17,41+CCY*19)-(129,59+CCY*19),XOR,7,BF:A$=INKEY$:CX=MOUSE(0):CY=MOUSE(1):C1=MOUSE(2,0):C2=MOUSE(2,1):WAIT 4:LINE(17,41+CCY*19)-(129,59+CCY*19),XOR,7,BF
  81. 810 IF A$=CHR$(31) THEN CCY=CCY+1:IF CCY>5 THEN CCY=5
  82. 820 IF A$=CHR$(30) THEN CCY=CCY-1:IF CCY<0 THEN CCY=0
  83. 830 IF A$=CHR$(24) OR C2=-1 THEN PUT@A(16,40)-(130,160),SP:GOSUB *解:RETURN
  84. 840 IF A$=CHR$(13) THEN 870
  85. 850 IF CX>40 AND CX<130 AND CY>41 AND CY<160 AND C1=-1 THEN CCY=INT((CY-40)/19):GOTO 870
  86. 860 GOTO 800
  87. 870 D$="何かキーを押してください。":L$="するファイル名 or CD命令  RETで取消":S$="ディスク 又は ファイルが存在ません":ON CCY+1 GOTO 1500,1660,1500,880,1330,1330
  88. 880 'MMLに変換
  89. 890 CLS:PRINT "MMLに変換していいですか?(Y/N)":N$=INPUT$(1):IF N$="N" OR N$="n" THEN RETURN *表示
  90. 900 IF N$<>"Y" AND N$<>"Y" THEN 890
  91. 910 F$="":PRINT "MMLのファイル名を指定してください。 ";:LINE INPUT F$
  92. 920 IF F$="" THEN 890
  93. 930 F1$="":PRINT "FMのファイル名を指定してください。指定しない時は そのままリターン":LINE INPUT F1$
  94. 940 F2$="":PRINT "PCMのファイル名を指定してください。指定しない時は そのままリターン":LINE INPUT F2$
  95. 950 IF F1$="" AND F2$="" THEN PRINT "どちらも指定しないことは出来ません。":GOTO 930
  96. 960 PRINT "使用しないパートは省きますか。(Y/N)":N$=INPUT$(1):IF N$="y" THEN N$="Y"
  97. 970 ON ERROR GOTO *H1:R$=CHR$(13)+CHR$(10):OPEN "O",#1,F$+".MML":CLS
  98. 980 INTERVAL OFF:PRINT "今から変換します。":PRINT "ファイル名   ";F$;".MML":PRINT "FMファイル名 ";F1$+".FMB":PRINT "PCMファイル名";F2$;".PMB"
  99. 990 PRINT #1,".TITLE "+TITL$+R$;:PRINT #1,".MMLTYPE FB386"+R$;
  100. 1000 IF F1$<>"" THEN PRINT #1,".FM "+F1$+R$;
  101. 1010 IF F2$<>"" THEN PRINT #1,".PCM "+F2$+R$;
  102. 1020 FOR A=0 TO 13:L2(A)=0:MC(A)=0:PL$(A)="":MK(A)=0:NEXT:MEC=0:AD=0
  103. 1030 IF N$<>"Y" THEN 1110
  104. 1040 FOR A=0 TO 13:IF OE(A)=0 THEN L2(A)=1:MEC=MEC+1:GOTO 1070
  105. 1050 CC=0:FOR B=0 TO OE(A):IF OL(B,A)<>0 THEN CC=1
  106. 1060 NEXT:IF CC=0 THEN L2(A)=1:MEC=MEC+1
  107. 1070 NEXT:A$=STR$(14-MEC):PRINT #1,".PARTMAX "+RIGHT$(A$,LEN(A$)-1)+R$;:C1=0:FOR A=0 TO 13
  108. 1080 IF L2(A)=0 THEN A$=STR$(C1):PRINT #1,".PART "+RIGHT$(A$,LEN(A$)-1)+" "+RIGHT$(STR$(A),LEN(STR$(A))-1)+R$;:C1=C1+1
  109. 1090 NEXT
  110. 1100 M3=8
  111. 1110 FOR M=0 TO 13:PL$(M)="":M1=MC(M):M2!=0:LOCATE 0,4:PRINT AD:IF L2(M)=1 THEN 1230
  112. 1120 IF M1>OE(M) THEN 1220
  113. 1130 AD=AD+1:M2!=M2!+LN!(OL(M1,M)):IF OL(M1,M)<9 THEN MC=OL(M1,M)
  114. 1140 MM=OL(M1,M):IF MM=0 THEN 1180
  115. 1150 IF MM>9 THEN PL$(M)=PL$(M)+"R"+ML$(MM-1)
  116. 1160 WHILE MM<10:IF OK(M1,M)<>MK(M) THEN MK(M)=OK(M1,M):PL$(M)=PL$(M)+"O"+RIGHT$(STR$(OK(M1,M)),1)
  117. 1170 PL$(M)=PL$(M)+MID$("CDEFGAB",OT(M1,M),1)+ML$(MM-1):MM=10:WEND
  118. 1180 M1=M1+1:IF M1>OE(M) THEN MEC=MEC+1:GOTO 1220
  119. 1190 IF M2!>M3 THEN M3=M3+1 ELSE 1210
  120. 1200 IF M>0 THEN M=14:NEXT:GOTO 1110
  121. 1210 IF M2!<M3 THEN 1130
  122. 1220 MC(M)=M1
  123. 1230 NEXT:FOR M=0 TO 13:IF L2(M)=1 THEN 1250
  124. 1240 PRINT #1,PL$(M)+R$;
  125. 1250 NEXT:IF MEC<14 THEN PRINT #1,".NEXT"+R$;:GOTO 1100
  126. 1260 PRINT #1,".END":CLOSE #1:GOSUB *表示:' ★ 変換終了
  127. 1270 *H1
  128. 1280 IF ERR=60 OR ERR=75 THEN PRINT "ディスクが正しくセットされていません":PRINT D$:N$=INPUT$(1):RESUME 890
  129. 1290 IF ERR=73 THEN PRINT "このディスクは書き込みが禁止されています。":PRINT D$:N$=INPUT$(1):RESUME 890
  130. 1300 IF ERR=64 THEN PRINT "指定のファイルは既に存在しています。":GOTO 1320
  131. 1310 PRINT "エラーが生じました。 エラー番号";ERR;" 行番号";ERL:PRINT D$:N$=INPUT$(1):RESUME 890
  132. 1320 PRINT "SAVEを続行しますか。(Y/N)":A$=INPUT$(1):IF A$="N" OR A$="n" THEN RESUME 890 ELSE KILL F$+".MML":RESUME 970
  133. 1330 'FM or PCM LOAD
  134. 1340 CLS:PRINT "どのドライブからLOADしますか":A$=INPUT$(1):IF ASC(A$)<65 OR ASC(A$)>82 THEN 1340
  135. 1350 ON ERROR GOTO *D5:SHELL A$+":":FILES"*.*"
  136. 1360 F$="":PRINT "LOAD";L$:PRINT A$+">";:LINE INPUT F$
  137. 1370 IF F$="" THEN GOSUB *解:RETURN *表示
  138. 1380 IF LEFT$(F$,2)="CD" THEN SHELL F$:GOTO 1510
  139. 1390 IF MID$(F$,2,1)=":" THEN A$=LEFT$(F$,1):GOTO 1510
  140. 1400 ON ERROR GOTO *D6:ON CCY-3 GOTO 1410,1420
  141. 1410 LOAD@ F$+".PMB":GOTO 1430
  142. 1420 LOAD@ F$+".FMB"
  143. 1430 ON ERROR GOTO 0:GOSUB *音色名:GOSUB *解:RETURN *表示
  144. 1440 *D5
  145. 1450 PRINT S$:PRINT D$:N$=INPUT$(1):RESUME 1340
  146. 1460 *D6
  147. 1470 IF ERR=63 THEN PRINT "指定のファイルが見つかりません":PRINT D$:N$=INPUT$(1):RESUME 1350
  148. 1480 IF ERR=50 OR ERR=75 THEN PRINT "ディスクが正しくセットされていません":PRINT D$:N$=INPUT$(1):RESUME 1340
  149. 1490 PRINT "エラーが生じました。 エラー番号";ERR;" 行番号";ERL:PRINT D$:N$=INPUT$(1):RESUME 1340
  150. 1500 CLS:PRINT "どのドライブからLOADしますか":A$=INPUT$(1):IF ASC(A$)<65 OR ASC(A$)>82 THEN 1500
  151. 1510 ON ERROR GOTO *D3:SHELL A$+":":FILES"*.*"
  152. 1520 F$="":PRINT "LOAD";L$:PRINT A$+">";:LINE INPUT F$
  153. 1530 IF F$="" THEN GOSUB *解:RETURN *表示
  154. 1540 IF LEFT$(F$,2)="CD" THEN SHELL F$:GOTO 1510
  155. 1550 IF MID$(F$,2,1)=":" THEN A$=LEFT$(F$,1):GOTO 1510
  156. 1560 ON ERROR GOTO *D4:OPEN "I",#1,F$+".MUJ"
  157. 1570 INPUT #1,N$:IF N$<>"音楽天国形式 Ver1.2" THEN PRINT "このファイルは この音楽天国では 読み込めません":PRINT D$:N$=INPUT$(1):CLOSE #1:GOTO 1440
  158. 1580 INPUT #1,TNP:INPUT #1,TITL$
  159. 1590 FOR A=0 TO 13:INPUT #1,OE(A),VO(A):FOR B=0 TO OE(A)-1:INPUT #1,OT(B,A),OK(B,A),OL(B,A):NEXT:NEXT:CLOSE #1:ON ERROR GOTO 0:FOR G1=0 TO 3:FOR G=0 TO 13:OC(G,G1)=OL(MX*10+G,MY+G1):NEXT:NEXT:音楽=1-音楽:GOSUB *F4:RETURN *表示
  160. 1600 *D3
  161. 1610 PRINT S$:PRINT D$:N$=INPUT$(1):RESUME 1500
  162. 1620 *D4
  163. 1630 IF ERR=63 THEN PRINT "指定のファイルが見つかりません":PRINT D$:N$=INPUT$(1):RESUME 1510
  164. 1640 IF ERR=50 OR ERR=75 THEN PRINT "ディスクが正しくセットされていません":PRINT D$:N$=INPUT$(1):RESUME 1510
  165. 1650 PRINT "エラーが生じました。 エラー番号";ERR;" 行番号";ERL:PRINT D$:N$=INPUT$(1):RESUME 1500
  166. 1660 CLS:PRINT "どのドライブにSAVEしますか":A$=INPUT$(1):IF ASC(A$)<65 OR ASC(A$)>82 THEN 1660
  167. 1670 ON ERROR GOTO *D1:SHELL A$+":":FILES"*.*"
  168. 1680 F$="":PRINT "SAVE";L$:PRINT A$+">";:LINE INPUT F$
  169. 1690 IF F$="" THEN RETURN *表示
  170. 1700 IF LEFT$(F$,2)="CD" THEN SHELL F$:GOTO 1670
  171. 1710 IF MID$(F$,2,1)=":" THEN A$=LEFT$(F$,1):GOTO 1670
  172. 1720 ON ERROR GOTO *D2:OPEN "O",#1,F$+".MUJ":PRINT #1,"音楽天国形式 Ver1.2":PRINT #1,TNP:PRINT #1,TITL$
  173. 1730 FOR A=0 TO 13:PRINT #1,OE(A);VO(A):FOR B=0 TO OE(A)-1:PRINT #1,OT(B,A);OK(B,A);OL(B,A);:NEXT:NEXT:CLOSE #1:ON ERROR GOTO 0:RETURN *表示
  174. 1740 *D1
  175. 1750 PRINT S$:RESUME 1680
  176. 1760 *D2
  177. 1770 IF ERR=60 OR ERR=75 THEN PRINT "ディスクが正しくセットされていません":PRINT D$:N$=INPUT$(1):RESUME 1660
  178. 1780 IF ERR=73 THEN PRINT "このディスクは書き込みが禁止されています。":PRINT D$:N$=INPUT$(1):RESUME 1660
  179. 1790 IF ERR=64 THEN PRINT "指定のファイルは既に存在しています。":GOTO 1810
  180. 1800 PRINT "エラーが生じました。 エラー番号";ERR;" 行番号";ERL:PRINT D$:N$=INPUT$(1):RESUME 1660
  181. 1810 PRINT "SAVEを続行しますか。(Y/N)":A$=INPUT$(1):IF A$="N" OR A$="n" THEN RESUME 1660
  182. 1820 IF A$<>"Y" AND A$<>"y" THEN 1810
  183. 1830 KILL F$+".MUJ":RESUME 1720
  184. 1840 *F2
  185. 1850 GOSUB *禁:GET@A(80,40)-(120,99),SP:LINE(80,40)-(118,78),PSET,0,BF,7:SYMBOL(81,41),"音譜",1,1,0:SYMBOL(81,60),"休符",1,1,0:CCY=0
  186. 1860 LINE(81,41+CCY*19)-(117,59+CCY*19),XOR,7,BF:A$=INKEY$:CX=MOUSE(0):CY=MOUSE(1):C1=MOUSE(2,0):C2=MOUSE(2,1):WAIT 4:LINE(81,41+CCY*19)-(117,59+CCY*19),XOR,7,BF
  187. 1870 IF A$=CHR$(31) THEN CCY=1 ELSE IF A$=CHR$(30) THEN CCY=0
  188. 1880 IF A$=CHR$(24) OR C2=-1 THEN PUT@A(80,40)-(120,99),SP:GOSUB *解:RETURN
  189. 1890 IF A$=CHR$(13) THEN 1920
  190. 1900 IF CX>81 AND CX<116 AND CY>40 AND CY<77 AND C1=-1 THEN CCY=INT((CY-40)/20):GOTO 1920
  191. 1910 GOTO 1860
  192. 1920 PUT@A(80,40)-(120,99),SP:IF CCY=1 THEN 2020
  193. 1930 GET@A(80,40)-(185,210),SP:LINE(80,40)-(184,209),PSET,0,BF,7:FOR A=0 TO 8:SYMBOL(81,41+A*19),KMID$("   全付点二分  二分付点四分  四分付点八分  八分 16分32分",A*4+1,4)+"音譜",1,1,0:NEXT:CCY=0
  194. 1940 LINE(81,41+CCY*19)-(184,59+CCY*19),XOR,7,BF:A$=INKEY$:CX=MOUSE(0):CY=MOUSE(1):C1=MOUSE(2,0):C2=MOUSE(2,1):WAIT 4:LINE(81,41+CCY*19)-(184,59+CCY*19),XOR,7,BF
  195. 1950 IF A$=CHR$(31) THEN CCY=CCY+1:IF CCY>8 THEN CCY=8
  196. 1960 IF A$=CHR$(30) THEN CCY=CCY-1:IF CCY<0 THEN CCY=0
  197. 1970 IF A$=CHR$(24) OR C2=-1 THEN PUT@A(80,40)-(185,210),SP:GOSUB *解:RETURN
  198. 1980 IF A$=CHR$(13) THEN 2010
  199. 1990 IF CX>81 AND CX<184 AND CY>40 AND CY<209 AND C1=-1 THEN CCY=INT((CY-40)/19):GOTO 2010
  200. 2000 GOTO 1940
  201. 2010 ON1=CCY+1:ON2=1:PUT@A(80,40)-(185,210),SP:GOSUB *解:RETURN *表示2
  202. 2020 GET@A(80,40)-(185,155),SP:LINE(80,40)-(184,155),PSET,0,BF,7:FOR A=0 TO 5:SYMBOL(81,41+A*19),KMID$("  全 2分 4分 8分16分32分",A*3+1,3)+"休符",1,1,0:NEXT:CCY=0
  203. 2030 LINE(81,41+CCY*19)-(184,59+CCY*19),XOR,7,BF:A$=INKEY$:CX=MOUSE(0):CY=MOUSE(1):C1=MOUSE(2,0):C2=MOUSE(2,1):WAIT 4:LINE(81,41+CCY*19)-(184,59+CCY*19),XOR,7,BF
  204. 2040 IF A$=CHR$(31) THEN CCY=CCY+1:IF CCY>5 THEN CCY=5
  205. 2050 IF A$=CHR$(30) THEN CCY=CCY-1:IF CCY<0 THEN CCY=0
  206. 2060 IF A$=CHR$(24) OR C2=-1 THEN PUT@A(80,40)-(185,155),SP:GOSUB *解:RETURN
  207. 2070 IF A$=CHR$(13) THEN 2100
  208. 2080 IF CX>81 AND CX<184 AND CY>40 AND CY<155 AND C1=-1 THEN CCY=INT((CY-40)/19):GOTO 2100
  209. 2090 GOTO 2030
  210. 2100 ON2=2:ON1=CCY+1:PUT@A(80,40)-(185,155),SP:GOSUB *解:RETURN *表示2
  211. 2110 *F3
  212. 2120 GOSUB *禁:GET@A(144,40)-(210,98),SP:LINE(144,40)-(208,97),PSET,0,BF,7:FOR A=0 TO 2:SYMBOL(145,40+A*19),KMID$("空白削除 挿入  削除",A*4+1,4),1,1,0:NEXT:CCY=0
  213. 2130 LINE(145,41+CCY*19)-(207,59+CCY*19),XOR,7,BF:A$=INKEY$:CX=MOUSE(0):CY=MOUSE(1):C1=MOUSE(2,0):C2=MOUSE(2,1):WAIT 4:LINE(145,41+CCY*19)-(207,59+CCY*19),XOR,7,BF
  214. 2140 IF A$=CHR$(31) THEN CCY=CCY+1:IF CCY>2 THEN CCY=2
  215. 2150 IF A$=CHR$(30) THEN CCY=CCY-1:IF CCY<0 THEN CCY=0
  216. 2160 IF A$=CHR$(24) OR C2=-1 THEN PUT@A(144,40)-(210,98),SP:GOSUB *解:RETURN
  217. 2170 IF A$=CHR$(13) THEN 2200
  218. 2180 IF CX>144 AND CX<210 AND CY>40 AND CY<120 AND C1=-1 THEN CCY=INT((CY-40)/19):GOTO 2200
  219. 2190 GOTO 2130
  220. 2200 PUT@A(144,40)-(210,98),SP
  221. 2210 ON CCY+1 GOTO 2220,2250,2250
  222. 2220 FOR A=0 TO 13:FOR B=0 TO OE(A)
  223. 2230 IF OL(B,A)=0 THEN FOR C=B TO OE(A):OT(C,A)=OT(C+1,A):OK(C,A)=OK(C+1,A):OL(C,A)=OL(C+1,A):NEXT
  224. 2240 NEXT:NEXT:FOR G1=0 TO 3:FOR G=0 TO 13:OC(G,G1)=OL(MX*10+G,MY+G1):NEXT:NEXT:GOSUB *解:RETURN *表示2
  225. 2250 GET@A(100,40)-(300,60),SP:LINE(100,40)-(300,60),PSET,0,BF,7:SYMBOL(101,41),"場所を指定してください。",1,1,0
  226. 2260 CX=INT((MOUSE(0)-60)/40):CY=INT((MOUSE(1)-60)/100):LINE(CX*40+60,CY*100+80)-(CX*40+91,CY*100+140),XOR,7,BF:LINE(CX*40+60,CY*100+80)-(CX*40+91,CY*100+140),XOR,7,BF
  227. 2270 IF MOUSE(2,1)=-1 THEN 2120
  228. 2280 IF CX<0 THEN 2260
  229. 2290 IF MOUSE(2,0)=0 THEN 2260
  230. 2300 CY=MY+CY:IF CCY=2 THEN 2330
  231. 2310 FOR A=OE(CY) TO CX STEP -1:OT(A+1,CY)=OT(A,CY):OK(A+1,CY)=OK(A,CY):OL(A+1,CY)=OL(A,CY):NEXT:OE(CY)=OE(CY)+1:OE(CY)=OE(CY)+1:GOSUB *解:PUT@A(100,40)-(300,60),SP:OL(CX,CY)=0
  232. 2320 FOR G1=0 TO 3:FOR G=0 TO 13:OC(G,G1)=OL(MX*10+G,MY+G1):NEXT:NEXT:RETURN *表示2
  233. 2330 FOR A=CX TO OE(CY):OT(A,CY)=OT(A+1,CY):OK(A,CY)=OK(A+1,CY):OL(A,CY)=OL(A+1,CY):NEXT:OE(CY)=OE(CY)-1:GOSUB *解:PUT@A(100,40)-(300,60),SP:FOR G1=0 TO 3:FOR G=0 TO 13:OC(G,G1)=OL(MX*10+G,MY+G1):NEXT:NEXT:RETURN *表示2
  234. 2340 *F4
  235. 2350 MEC=0:LINE(300,465)-(350,480),PSET,%7,BF:音楽=1-音楽:FOR G=0 TO 13:MC(G)=0:NEXT:M$="T120V10L4@":IF 音楽=1 THEN SYMBOL(300,465),"演奏中",1,1,0 ELSE RETURN
  236. 2360 PLAY M$+STR$(VO(0)),M$+STR$(VO(1)),M$+STR$(VO(2)),M$+STR$(VO(3)),M$+STR$(VO(4)),M$+STR$(VO(5)),M$+STR$(VO(6)),M$+STR$(VO(7)),M$+STR$(VO(8)),M$+STR$(VO(9)),M$+STR$(VO(10)),M$+STR$(VO(11)),M$+STR$(VO(12)):RETURN
  237. 2370 *F5
  238. 2380 GOSUB *禁:GET@A(272,40)-(356,120),SP:LINE(272,40)-(354,119),PSET,0,BF,7:FOR A=0 TO 3:SYMBOL(273,41+A*19),KMID$("音色変更タイトルCD演奏新規作成",A*4+1,4),1,1,0:NEXT:CCY=0
  239. 2390 LINE(273,41+CCY*19)-(353,59+CCY*19),XOR,7,BF:A$=INKEY$:CX=MOUSE(0):CY=MOUSE(1):C1=MOUSE(2,0):C2=MOUSE(2,1):WAIT 4:LINE(273,41+CCY*19)-(353,59+CCY*19),XOR,7,BF
  240. 2400 IF A$=CHR$(31) THEN CCY=CCY+1:IF CCY>3 THEN CCY=3
  241. 2410 IF A$=CHR$(30) THEN CCY=CCY-1:IF CCY<0 THEN CCY=0
  242. 2420 IF A$=CHR$(24) OR C2=-1 THEN PUT@A(272,40)-(356,120),SP:GOSUB *解:RETURN
  243. 2430 IF A$=CHR$(13) THEN 2460
  244. 2440 IF CX>273 AND CX<353 AND CY>40 AND CY<118 AND C1=-1 THEN CCY=INT((CY-40)/19):GOTO 2460
  245. 2450 GOTO 2390
  246. 2460 PUT@A(272,40)-(356,120),SP:ON CCY+1 GOTO 2620,2490,2470,2540
  247. 2470 ON ERROR GOTO *E1:CDC=1-CDC:IF CDC=1 THEN CD PLAY ELSE CD STOP
  248. 2480 ON ERROR GOTO 0:RETURN
  249. 2490 CLS:PRINT "現在のタイトル名  ";:IF TITL$="" THEN PRINT "設定無" ELSE PRINT TITL$
  250. 2500 PRINT "タイトル名を入力してください ";:LINE INPUT A$:IF A$<>"" THEN TITL$=A$
  251. 2510 GOSUB *解:RETURN *表示
  252. 2520 *E1
  253. 2530 RESUME 2480
  254. 2540 CC=0:GET@A(100,200)-(400,250),SP:LINE(100,200)-(398,248),PSET,0,BF,7:LINE(399,202)-(400,250),PSET,0,BF:LINE(102,249)-(400,250),PSET,0,BF:SYMBOL(110,210),"本当に消去していいですか?",1,1,0:SYMBOL(110,230),"消去  中止",1,1,0
  255. 2550 A$=INKEY$:CX=MOUSE(0):CY=MOUSE(1):IF A$=CHR$(13) THEN 2590
  256. 2560 IF A$=CHR$(24) THEN 2610
  257. 2570 IF CX>100 AND CX<300 AND CY>230 AND CY<250 AND MOUSE(2,0)=-1 THEN IF CX<155 THEN 2590 ELSE 2610
  258. 2580 GOTO 2550
  259. 2590 IF CC=1 THEN RETURN 20
  260. 2600 LINE(101,201)-(397,229),PSET,7,BF:SYMBOL(110,210),"今までの記録は消えてしまいます。",1,1,0:CC=1:GOTO 2550
  261. 2610 PUT@A(100,200)-(400,250),SP:GOSUB *解:RETURN
  262. 2620 GET@A(272,40)-(336,310),SP:LINE(272,40)-(334,310),PSET,0,BF,7:FOR A=0 TO 13:SYMBOL(273,41+A*19),"番号"+STR$(A+1),1,1,0:NEXT
  263. 2630 LINE(273,41+CCY*19)-(333,59+CCY*19),XOR,7,BF:A$=INKEY$:CX=MOUSE(0):CY=MOUSE(1):C1=MOUSE(2,0):C2=MOUSE(2,1):WAIT 4:LINE(273,41+CCY*19)-(333,59+CCY*19),XOR,7,BF
  264. 2640 IF A$=CHR$(31) THEN CCY=CCY+1:IF CCY>13 THEN CCY=13
  265. 2650 IF A$=CHR$(30) THEN CCY=CCY-1:IF CCY<0 THEN CCY=0
  266. 2660 IF A$=CHR$(24) OR C2=-1 THEN PUT@A(272,40)-(336,310),SP:CCY=0:GOTO 2380
  267. 2670 IF A$=CHR$(13) THEN 2700
  268. 2680 IF CX>273 AND CX<389 AND CY>40 AND CY<309 AND C1=-1 THEN CCY=INT((CY-40)/19):GOTO 2700
  269. 2690 GOTO 2630
  270. 2700 C1=0:C2=CCY:IF CCY>5 THEN C2=CCY:CCY=CCY-5:C1=1
  271. 2710 PUT@A(272,40)-(336,310),SP:LINE(16,60)-(150,89),PSET,0,BF,7:SYMBOL(17,61),"音色変更  番号"+STR$(CCY+1),1,1,0:CCX=0
  272. 2720 '
  273. 2730 MOUSE 1,,,0:LINE(8,80)-(640,460),PSET,0,BF,7:LINE(638,82)-(639,462),PSET,0,BF:LINE(10,461)-(639,462),PSET,0,BF:FOR A=1 TO 128+(C1=1)*96:CY=INT((A-1)/7):CX=A-CY*7-1:LINE(CX*90+8,CY*20+80)-(CX*90+98,CY*20+100),PSET,0,B
  274. 2740 B$=STR$(A):B$=RIGHT$(B$,LEN(B$)-1):SYMBOL(CX*90+9,CY*20+81),B$+ONN$(C1,A),1,1,0:NEXT:MOUSE 1,,,1
  275. 2750 VY=INT((VO(C2)-1)/7):VX=VO(C2)-VY*7-1:LINE(VX*90+9,VY*20+80)-(VX*90+97,VY*20+100),XOR,7,BF:A$=INKEY$:CX=MOUSE(0):CY=MOUSE(1):LINE(VX*90+9,VY*20+80)-(VX*90+97,VY*20+100),XOR,7,BF
  276. 2760 IF A$=CHR$(13) THEN 音楽=1-音楽:GOSUB *F4:GOSUB *解:RETURN *表示
  277. 2770 IF MOUSE(2,0)=-1 AND CX>10 AND CX<635 AND CY>80 AND CY<460 THEN VO(C2)=INT((CX-9)/90)+INT((CY-80)/20)*7+1:音楽=1-音楽:GOSUB *F4:GOSUB *解:RETURN *表示
  278. 2780 IF A$="" THEN 2750
  279. 2790 IF A$=CHR$(30) THEN VO(C2)=VO(C2)-7
  280. 2800 IF A$=CHR$(31) THEN VO(C2)=VO(C2)+7
  281. 2810 IF A$=CHR$(28) THEN VO(C2)=VO(C2)+1
  282. 2820 IF A$=CHR$(29) THEN VO(C2)=VO(C2)-1
  283. 2830 IF VO(C2)<1 THEN VO(C2)=1 
  284. 2840 IF VO(C2)>32 AND C1=1 THEN VO(C2)=32
  285. 2850 IF VO(C2)>128 THEN VO(C2)=128
  286. 2860 GOTO 2750
  287. 2870 RETURN
  288. 2880 *F6
  289. 2890 MX=MX-1:IF MX<0 THEN MX=0
  290. 2900 FOR G1=0 TO 3:FOR G=0 TO 13:OC(G,G1)=OL(MX*10+G,MY+G1):NEXT:NEXT
  291. 2910 RETURN *表示2
  292. 2920 *F7
  293. 2930 MX=MX+1:IF MX>99 THEN MX=99
  294. 2940 FOR G1=0 TO 3:FOR G=0 TO 13:OC(G,G1)=OL(MX*10+G,MY+G1):NEXT:NEXT
  295. 2950 RETURN *表示2
  296. 2960 *F8
  297. 2970 MY=MY-1:IF MY<0 THEN MY=0
  298. 2980 FOR G1=0 TO 3:FOR G=0 TO 13:OC(G,G1)=OL(MX*10+G,MY+G1):NEXT:NEXT
  299. 2990 RETURN *表示2
  300. 3000 *F9
  301. 3010 MY=MY+1:IF MY>10 THEN MY=10
  302. 3020 FOR G1=0 TO 3:FOR G=0 TO 13:OC(G,G1)=OL(MX*10+G,MY+G1):NEXT:NEXT
  303. 3030 RETURN *表示2
  304. 3040 *禁
  305. 3050 FOR KN=1 TO 9:KEY (KN) OFF:NEXT:RETURN
  306. 3060 *解
  307. 3070 FOR KN=1 TO 9:KEY (KN) ON:NEXT:RETURN
  308. 3080 *音色名
  309. 3090 FOR G=0 TO 1:FOR G1=1 TO 128+(G=1)*96:VOICE COPY G1,VOC,C1:A$="":FOR B=0 TO 3:IF VOC(B)<0 THEN D!=VOC(B)+65536 ELSE D!=VOC(B)
  310. 3100 B1=INT(D!/256):B2=D!-B1*256:A$=A$+CHR$(B2)+CHR$(B1):NEXT:ONN$(G,G1)=A$
  311. 3110 NEXT:NEXT:RETURN
  312.